﻿#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

//int main()
//{
//	int a = 10;
//	int* pa = &a;
//	return 0;
////}
//
//int main()
//{
//	int a = 100;
//	int* pa = &a;
//	*pa = 10;
//	printf("%d\n",a);
//	return 0;
//}

//int main()
//{
//	printf("%zd\n", sizeof(char*));
//	printf("%zd\n", sizeof(short*));
//	printf("%zd\n", sizeof(int*));
//	printf("%zd\n", sizeof(double*));
//	return 0;
//}

//int main()
//{
//	int n = 0x11223344;
//	int* pi = &n;
//	*pi = 0;
//	return 0;
//}
//
//int main()
//{
//	int n = 0x11223344;
//	//将整型指针强制类型转换为
//	//字符类型指针
//	char* pc = (char*)&n;
//	*pc = 0;
//	return 0;
//}
//
//int main()
//{
//	int n = 10;
//	char* pc = (char*)&n;
//	int* pi = &n;
//
//	printf("&n = %p\n", &n);
//	printf("pc = %p\n", pc);
//	printf("pc+1 = %p\n", pc + 1);
//	printf("pi = %p\n", pi);
//	printf("pi+1 = %p\n", pi + 1);
//	return 0;
//}

//
//int main()
//{
//	int a = 10;
//	int* pa = &a;
//	char* pc = &a;
//	return 0;
//}
//错误示范
//int main()
//{
//	int a = 10;
//	void* pa = &a;
//	void* pc = &a;
//
//	*pa = 10;
//	*pc = 0;
//	return 0;
//}
//
//int main()
//{
//	const int n = 0;
//	int* pn = &n;
//	*pn = 10;
//	printf("%d\n", n);
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int* p = &a;
//	p = &b;
//	printf("%p\n%p\n%p\n", &a, &b, p);
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	const int * p = &a;
//	//等价于int const * p = &a;
//	p = &b;
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int* const p = &a;
//	*p = 10;
//	printf("%d\n", a);
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int const * const p = &a;
//	*p = 10;
//	p = &b;
//	return 0;
//}

//使用指针访问数组：

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = &arr[0];
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + 1));
//	}
//	return 0;
//}
//
//#include <string.h>
//int main()
//{
//	char arr[] = "abcdef";
//	int num = strlen(arr);
//	printf("%d\n", num);
//	return 0;
//}

//模拟实现strlen
//#include <assert.h>
//int my_strlen(char* p)
//{
//	assert(p != NULL);
//	char* start = p;
//	while (*p)
//	{
//		p++;
//	}
//	return p - start;
//}
//
//int main()
//{
//	char arr[] = "abcdef";
//	int num = my_strlen(arr);
//	printf("%d\n", num);
//	return 0;
//}

//指针的关系运算
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = &arr[0];
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (p < arr + sz) //指针的⼤⼩⽐较
//	{
//		printf("%d ", *p);
//		p++;
//	}
//	return 0;
//}

//int main()
//{
//	int* p;
//	*p = 20;
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 0 };
//	int* p = &arr[0];
//	int i = 0;
//	for (i = 0; i <= 11; i++)
//	{
//		*(p++) = i;
//	}
//	return 0;
//}

//#include <stdio.h>
//size_t my_strlen(char* p)
//{
//	char* start = p;
//	while (*p)
//	{
//		p++;
//	}
//	return p - start;
//}
//
//int main()
//{
//	char arr[] = "abcdef";
//	size_t num = my_strlen(arr);
//	printf("%zd\n", num);
//	return 0;
//}

//void exg(int a, int b)
//{
//	int exg = a;
//	a = b;
//	b = exg;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a = %d，b = %d\n", a, b);
//	exg(a, b);
//	printf("交换后：a = %d，b = %d\n", a, b);
//	return 0;
//}

void exg(int* pa, int* pb)
{
	int exg = *pa;
	*pa = *pb;
	*pb = exg;
}

int main()
{
	int a = 10;
	int b = 20;
	printf("交换前：a = %d，b = %d\n", a, b);
	exg(&a, &b);
	printf("交换后：a = %d，b = %d\n", a, b);
	return 0;
}